package com.binguo.thirdPay.aiBao;

import java.util.TreeMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 
 * 		类说明：爱宝支付接口，业务处理
 *
 */
@Service
public class AiBaoPay {
	
	@Autowired
	private SendRequest sendRequest;
	

	/**
	 * 		•	商户扫用户付款码
	 * @param store_id		是 	门店编号
	 * @param oauth_code	是	付款码编号(用户付款码数字信息）
	 * @param total_amount	是	付款金额
	 * @param shop_price	否	商品金额
	 * @param merch_id		否	收银员ID
	 * @param order_no		否	外部订单号
	 * @return		返回数据如下：
	 * 					status  1表示成功，其他表示失败
	 * 					msg		ok表示成功，其他表示失败原因
	 * 					data	如果失败无此参数，如果成功如下：
	 * 						trade_status-支付状态
	 * 						total_amount-支付金额
	 * 						created_at-支付时间
	 */
	public String merchToUser(String store_id, String oauth_code, String total_amount, String shop_price, Integer merch_id, String order_no) {
		
		TreeMap<String,Object> map = new TreeMap<String, Object>();
    	map.put("store_id", store_id);
    	map.put("oauth_code", oauth_code);
    	map.put("total_amount", total_amount);
    	if (shop_price == null) {} else {
        	map.put("shop_price", shop_price);
		}
		if (merch_id == null) {} else {
			map.put("merch_id", merch_id);
		}
		if (order_no == null) {} else {
	    	map.put("order_no", order_no);
		}
    	
    	String aiBaoStoreSign = sendRequest.getAiBaoStoreSign(map, sendRequest.getAiBaoStoreSecret(store_id));
    	
    	String sendPost = sendRequest.sendPost(InterfaceRequestAddr.MERCH_TO_USER, store_id, aiBaoStoreSign, sendRequest.getAiBaoParam(map));
    	map = null;
    	aiBaoStoreSign = null;
		return sendRequest.ascii2native(sendPost);
	}
	
	
	

	
	/**
	 * 		•	用户扫商户付款码
	 * @param store_id		是	门店编号
	 * @param total_amount	是	付款金额
	 * @param shop_price	否	商品金额
	 * @param merch_id		否	收银员ID
	 * @param order_no		否	外部订单号
	 * @return		返回数据如下：
	 * 					status  1表示成功，其他表示失败
	 * 					msg		ok表示成功，其他表示失败原因
	 * 					data	如果失败无此参数，如果成功如下：
	 * 						url-二维码连接地址
	 * 						trade_status-支付状态
	 */
	public String userToMerch(String store_id, String total_amount, String shop_price, Integer merch_id, String order_no) {
		
		TreeMap<String,Object> map = new TreeMap<String, Object>();
    	map.put("store_id", store_id);
    	map.put("total_amount", total_amount);
    	if (shop_price == null) {} else {
        	map.put("shop_price", shop_price);
		}
		if (merch_id == null) {} else {
			map.put("merch_id", merch_id);
		}
		if (order_no == null) {} else {
	    	map.put("order_no", order_no);
		}
    	
    	String aiBaoStoreSign = sendRequest.getAiBaoStoreSign(map, sendRequest.getAiBaoStoreSecret(store_id));
    	
    	String sendPost = sendRequest.sendPost(InterfaceRequestAddr.USER_TO_MERCH, store_id, aiBaoStoreSign, sendRequest.getAiBaoParam(map));
    	map = null;
    	aiBaoStoreSign = null;
		return sendRequest.ascii2native(sendPost);
	}
	
	
	
	
	/**
	 * 		•	订单支付查询
	 * @param store_id		是 	门店编号
	 * @param order_no		否	外部订单号
	 * @return		返回数据如下：
	 * 					status  1表示成功，其他表示失败
	 * 					msg		ok表示成功，其他表示失败原因
	 * 					data	如果失败无此参数，如果成功如下：
	 * 						trade_status-支付状态
	 * 						total_amount-支付金额
	 * 						created_at-支付时间
	 */
	public String payQuery(String store_id, String order_no) {
		
		TreeMap<String,Object> map = new TreeMap<String, Object>();
    	map.put("store_id", store_id);
		if (order_no == null) {} else {
	    	map.put("order_no", order_no);
		}
    	
    	String aiBaoStoreSign = sendRequest.getAiBaoStoreSign(map, sendRequest.getAiBaoStoreSecret(store_id));
    	
    	String sendPost = sendRequest.sendPost(InterfaceRequestAddr.QUERY_PAY, store_id, aiBaoStoreSign, sendRequest.getAiBaoParam(map));
    	map = null;
    	aiBaoStoreSign = null;
		return sendRequest.ascii2native(sendPost);
	}
	
	
	
	
	/**
	 * 		•	退款
	 * @param store_id		是 	门店编号
	 * @param order_no		否	外部订单号
	 * @return		返回数据如下：
	 * 					status  1表示成功，其他表示失败
	 * 					msg		ok表示成功，其他表示失败原因
	 * 					data	如果失败无此参数，如果成功如下：
	 * 						refund_status-退款状态，当status=1时返回
	 * 						refund_amount-退款金额
	 * 						refund_time-退款时间
	 */
	public String payRefund(String store_id, String order_no) {
		
		TreeMap<String,Object> map = new TreeMap<String, Object>();
    	map.put("store_id", store_id);
		if (order_no == null) {} else {
	    	map.put("order_no", order_no);
		}
    	
    	String aiBaoStoreSign = sendRequest.getAiBaoStoreSign(map, sendRequest.getAiBaoStoreSecret(store_id));
    	
    	String sendPost = sendRequest.sendPost(InterfaceRequestAddr.REFUNG, store_id, aiBaoStoreSign, sendRequest.getAiBaoParam(map));
    	map = null;
    	aiBaoStoreSign = null;
		return sendRequest.ascii2native(sendPost);
	}
}